7

Appendiks


Appendiks A: XML ­ en hurtig gennemgang

Dette afsnit indeholder en gennemgang af XML-funktioner og -konventioner til hurtigt opslag.


Enkeltdelene i et XML-dokument

Et XML-dokument består af følgende enkeltdele i den nævnte rækkefølge:


XML-erklæringer

XML-erklæringen skal ­ hvis den medtages ­ stå som den første linie i et XML-dokument. Den fortæller hvilken XML-version, dokumentet overholder, og om filen indeholder henvisninger til andre filer, f.eks.:

<?xml version="1.0" standalone="no"?>


DOCTYPE-erklæringer (herunder DTD'er)

DOCTYPE-erklæringen ­ der angiver dokumentets DTD ­ skal stå efter XML-erklæringen og inden rodelementets åbningskode. Der er to mulige dele i enhver DTD: Det eksterne undersæt og det interne undersæt. Hvis et dokument kun har et eksternt undersæt, kan det se således ud:

<?xml version="1.0" standalone="no">
<!DOCTYPE rodElement SYSTEM "URL-adresse til DTD">
<rodElement>Indhold følger her.</rodElement>

Hvis et dokument kun har et enkelt internt undersæt kan det se således ud:

<?xml version="1.0" standalone="yes">
<!DOCTYPE rodElement [
<!-- DTD følger her -->
]>
<rodElement>Indhold følger her.</rodElement>

Hvis et dokument indeholder både et eksternt undersæt og et internt undersæt, kan det se således ud:

<?xml version="1.0" standalone="no">
<!-- Ekstern DTD -->
<!DOCTYPE rodElement SYSTEM "URL-adresse på DTD" [
<!-- Intern DTD følger her -->
]>
<rodElement>Indhold følger her.</rodElement>


Elementer

Et element består af en åbningskode (<kodeNavn>), indhold og en lukkekode (</kodeNavn>):

<kodeNavn>Indhold følger her.</kodeNavn>

En undtagelse er den tomme kode der kan bestå af en enkelt kode med en almindelig skråstreg inden det afsluttende >-tegn:

<tomKode/>

Alle elementer skal indskydes ­ flettes ­ korrekt, dvs. den sidst åbnede kode skal lukkes, inden du kan lukke andre koder. Den følgende linie er f.eks. ugyldig i et XML-dokument, fordi den ikke lukker <kode2>, inden den lukker <kode1>:

<kode1><kode2>Indhold følger her.</kode1></kode2>

Hvert XML-dokument skal indeholde et rodelement der indeholder alle andre elementer i dokumentet.

Der skelnes mellem store og små bogstaver i elementnavne. Hvert elementnavn skal starte med et bogstav eller en understreg (_). Efterfølgende tegn i navnet kan være bogstaver, understreger, tal, bindestreger og punktummer, men ikke mellemrum eller tabulatorer.


Attributter

Elementer kan indeholde attributter som en del af deres åbningskode (eller­ for tomme elementer ­ en del af en enkelt åbnings-/lukkekode). En attribut består af et attributnavn efterfulgt af et lighedstegn samt attributværdien i anførselstegn, f.eks.:

<elementNavn attributNavn="attributVærdi">Indhold</elementNavn>
<elementNavn attributNavn="attributVærdi"/>


Kommentarer

En kommentar består af tekst mellem <!-- og -->. Indholdet i kommentarer skal ignoreres af XML-processorerne. Kommentarer må ikke indeholde "--", og de må ikke indeholde andre kommentarer.

<!-- Dette er en kommentar. Tegn som f.eks. < og > er tilladte her. -->


Behandlingsinstruktioner

En behandlingsinstruktion består af tekst mellem <? og ?>. Behandlingsinstruktioner læses kun af XML-processorer og må ikke bestå af indhold. Syntaksen for behandlingsinstruktioner er således:

<?målinstruktion?>


Tegnhenvisninger

En tegnhenvisning er en metode til repræsentation af Unicode-tegn i analyserede tegndata. Syntaksen for tegnhenvisninger er denne:

&#UnicodetegnVærdi;


Entitetshenvisninger

En entitetshenvisning er et navn, der repræsenterer et bestemt tegn, tekststreng eller fil. Entitetshenvisninger i et XML-dokument står altid mellem et og-tegn (&) og et semikolon (;). &gt; repræsenterer f.eks. et større-end-tegn (<), der kun må inkluderes i XML-indhold hvis det optræder som en entitetshenvisning.

Betydningen af hver entitetshenvisning der anvendes i et XML-dokument skal være defineret i dokumentets DTD, med undtagelse af følgende foruddefinerede tegn der ikke skal defineres for at kunne anvendes:

TegnEntitetshenvisning
<&lt;
>&gt;
&&amp;
"&quot;
'&apos;

Veludformede ("well-formed") XML'er

For at kunne betragtes som veludformet skal et XML-dokument overholde disse regler:


Gyldige XML'er

Et gyldigt XML-dokument er et XML-dokument, der er veludformet og overholder den DTD, der er angivet i dets DOCTYPE-erklæring.


Appendiks B: DTD ­ en hurtig gennemgang

Dette afsnit indeholder en gennemgang af DTD-funktioner og -konventioner til hurtigt opslag.


Delene i en DTD

En DTD kan sammensættes af følgende dele (rækkefølgen er underordnet):


Elementtypeerklæringer

Syntaksen for en elementtypedefinition er følgende:

<!ELEMENT elementNavn (elementIndhold)>

Der skelnes mellem store og små bogstaver i elementnavne. Hvert elementnavn skal starte med et bogstav eller en understreg (_). Efterfølgende tegn i navnet kan være bogstaver, understreger, tal, bindestreger og punktummer, men ikke mellemrum eller tabulatorer.

Elementindhold kan bestå af analyserede tegndata (dvs. tekst og entitetshenvisninger, udtrykt som #PCDATA) og/eller andre elementtyper. Følgende symboler kan indsættes efter ethvert elementnavn eller lukkeparentes i definitionen af elementindholdet:

SymbolBetydning
IntetNøjagtigt én
+En eller flere
*Nul eller flere
?Nul eller en

For at bestemme at et element skal efterfølges af et andet skal du anvende et komma:

<!ELEMENT elementNavn (element1, element2)>

For at indikere at et element kan indeholde et element eller et andet skal du anvende tegnet |:

<!ELEMENT elementNavn (element1 | element2)>

For at tillade at et element kan indeholde en kombination af bestemte elementer og #PCDATA i en vilkårlig rækkefølge, skal du anvende følgende syntaks:

<!ELEMENT elementNavn (#PCDATA | element1 | element2)*>

For at tillade at et element kan indeholde enhver kombination af elementer og #PCDATA i en vilkårlig rækkefølge skal du anvende følgende syntaks (bemærk, at parenteserne er udeladt):

<!ELEMENT elementNavn ANY>

For at definere et tomt element skal du anvende den følgende syntaks (bemærk, at parenteserne er udeladt):

<!ELEMENT elementNavn EMPTY>


Attributerklæringer

Syntaksen for en enkelt attributdefinition er således:

<!ATTLIST elementNavn attributNavn attributType standardVærdi>

Der skelnes mellem store og små bogstaver i attributnavne. Hvert attributnavn skal starte med et bogstav eller en understreg (_). Efterfølgende tegn i navnet kan være bogstaver, understreger, tal, bindestreger og punktummer, men ikke mellemrum eller tabulatorer.

Attributtyperne kan være følgende:

AttributtypeBetydning
CDATATegndata og entitetshenvisninger i anførselstegn ("")
IDSkal indeholde et unikt navn* for hvert element af denne type
IDREFDet unikke ID-navn* på et element i XML-filen
ENTITYEt ikke-analyseret eksternt entitetshenvisningsnavn* defineret i DTD'en
ENTITIESEn liste med ENTITY-navne adskilt af mellemrum
OpremsningEn liste med navne* i parentes adskilt med tegnet |
NMTOKENEn værdi der kun indeholder NavnTegn-tegn**
NMTOKENSEn liste med NMTOKEN'er adskilt med mellemrum
NOTATIONNavnet på en notation defineret i DTD'en
Opremsnings-NOTATIONEn liste med NOTATION'er i parentes adskilt med tegnet |

*Navne skal starte med et bogstav eller en understreg (_). Efterfølgende tegn i navnet kan være bogstaver, understreger, tal, bindestreger og punktummer, men ikke mellemrum eller tabulatorer.

**NavnTegn-tegn omfatter bogstaver, understreger, tal, bindestreger eller punktummer, men ikke mellemrum eller tabulatorer.

Standardattributværdierne kan være følgende

AttributtypeBetydning
#REQUIREDDenne attribut skal specificeres af elementet
#IMPLIEDDenne attribut skal ikke nødvendigvis anvendes
#FIXED værdiAngives attributten ikke, antages den at have værdi; hvis den er angivet, skal den være værdi
standardVærdiAngives attributten ikke, antages den at have standardVærdi

Kommentarer

En kommentar består af tekst mellem <!-- og -->. Indholdet i en kommentar bør ignoreres af XML-processorer. Kommentarer må ikke indeholde "--", og de må ikke indeholde andre kommentarer.

<!-- Dette er en kommentar. Tegn som f.eks. < og > er tilladte her. -->


Tegnhenvisninger

En tegnhenvisning er en metode til repræsentation af Unicode-tegn i analyserede tegndata. Syntaksen for tegnhenvisninger er denne:

&#UnicodetegnVærdi;


Erklæring af entitetshenvisninger

Der findes fem entitetstyper. Syntaksen for deres erklæringer er således:

TypeSyntaks
Analyseret intern<!ENTITY entitetsNavn "entitetstekst">
Analyseret ekstern<!ENTITY entitetsNavn SYSTEM "URL-adresse til fil"> ELLER <!ENTITY entitetsNavn PUBLIC "filnavn" "URL-adresse til fil">
Ikke-analyseret ekstern<!ENTITY entitetsNavn SYSTEM "URL-adresse til fil" NDATA notationsNavn> ELLER <!ENTITY entitetsNavn PUBLIC "filnavn" "URL-adresse til fil" NDATA notationsNavn>
Intern parameter<!ENTITY % entitetsNavn "entitetstekst">
Ekstern parameter<!ENTITY % entitetsNavn SYSTEM "URL-adresse til fil"> ELLER <!ENTITY % entitetsNavn PUBLIC "filnavn" "URL-adresse til fil">

Syntaksen for anvendelse af de tre første typer entitetshenvisninger er &entitetsNavn;. Syntaksen for anvendelse af en parameterentitet er %entitetsNavn;. Parameterentitetshenvisninger analyseres altid og kan kun anvendes i en DTD.


Notationserklæringer

Notationserklæringer bør specificeres på af de følgende to måder:

<!NOTATION notationsNavn SYSTEM "Ekstern identifikator">
<!NOTATION notationsNavn PUBLIC "Eksternt identifikatornavn" "Reserve URL-adresse">

Den eksterne identifikator bør være navnet på et program, der kan behandle eller vise de filer, notationen anvendes på, f.eks.:

<!NOTATION gif SYSTEM "Microsoft Internet Explorer">

Bemærk: Det er op til det program der behandler XML'en at videregive URL-adressen til det program der er angivet med den eksterne identifikator.



Behandlingsinstruktioner

En behandlingsinstruktion består af tekst mellem <? og ?>. Behandlingsinstruktioner læses kun af XML-processorer og må ikke bestå af indhold. Syntaksen for behandlingsinstruktioner er således:

<?målinstruktion?>


Appendiks C: Sådan fungerer tegnkodning

Lad os antage, at du lige har eksporteret en XML-fil fra avenue.quark, og ved gennemsyn af filen i en teksteditor ser du et lille "a" med en accent, hvor du regnede med at finde et varemærkesymbol. I virkeligheden ser en række af dine specialtegn forkerte ud. Hvad er der sket?

Det er mest sandsynligt at teksteditoren ikke understøtter den tegnkodning, der er anvendt i XML-filen. Dette afsnit forklarer detaljeret om dette emne.


Hvad er en tegnkodning?

En tegnkodning er en specifikation der knytter et tegnsæt sammen med de tilhørende numeriske værdier. ASCII-tegnkodningen knytter f.eks. tegnet "M" til den numeriske værdi 77, "N" til 78, "O" til 79 osv.

Når en tekstfil tegnkodes betyder det, at et program kan fortolke tekstfilen og vise de korrekte tegn på skærmen. Uden tegnkodning ville en tekstfil blot være en række tal. Hvis du ser på en tekstfil med en forkert tegnkodning, ser du sandsynligvis noget nonsens, fordi det program der åbnede filen knytter de numeriske værdier til et forkert tegnsæt.

Følgende er standard-tegnkodninger:

Avenue.quark understøtter UTF-8-, UTF-16- og Shift-JIS-tegnkodningerne.



Nedre og øvre tegnområder

Du kan opdele de fleste tegnkodninger i to dele: De første 128 tegn (det nedre område) og alle tegn derover (der øvre område).

Det nedre område i de fleste tegnkodninger er stort set bundet til de samme tegn. Området indeholder tegnene a-z, A-Z, 0-9, en række tegnsætningstegn og visse særlige kontroltegn.

Det er, når du bevæger dig op i det øvre område, at du kan komme i vanskeligheder. MacRoman og Windows Latin 1 indeholder f.eks. nedre områder der stort set er identiske. Hvis du derfor tager en fil hvori der kun anvendes tegn fra dette område og flytter filen fra Mac OS til Windows, ser det fint ud. Men hvis filen indeholder tegn fra det øvre område, får du sikkert nogle mærkelige resultater, fordi en lang række af værdierne i det øvre område er knyttet sammen med forskellige tegn på hver platform. Et tegn der viser et varemærkesymbol i MacOS vises f.eks. som et hævet lille A i Windows.

Når tegnene vises forkert er det enten fordi programmet der viser teksten ikke kender tekstens tegnkodning, eller fordi programmet ikke kan vise teksten korrekt med den tegnkodning der er angivet i filen.


Angivelse af tegnkodninger

Du kan angive en XML-fils tegnkodning ved at inkludere en tegnkodningsspecifikation i filens XML-erklæring som her:

<?xml version="1.0" standalone="yes" encoding="Shift_JIS"?>

Hvis en XML-fil ikke indeholder en tegnkodningsspecifikation, antager avenue.quark at filen anvender UTF-8-tegnkodningen.

Når du gemmer en XML-fil fra avenue.quark, angiver du dokumentets tegnkodning i lokalmenuen Tegnkodning, hvorefter avenue.quark automatisk indsætter den korrekte tegnkodningsattribut.



Tegnkodninger og DTD'er

I XML kan du angive tegnkodningen i et XML-fil. Men i XML findes der ingen metode til angivelse af tegnkodningen i en enkeltstående DTD-fil.

Det gør det heldigvis i avenue.quark. For at angive tegnkodningen af en fritstående DTD skal du blot tilføje følgende tekst som den første linie i filen:

<? xml encoding="encodingName" ?>

Vil du f.eks. specificere en fritstående DTD som en UTF-16-DTD, skal du blot tilføje denne linie i starten af filen:

<? xml encoding="UTF-16" ?>